草庐IT

vc x86.mis

全部标签

windows - x86 可执行文件在 64 位操作系统上可以使用多少内存?

我认为这个问题听起来很清楚,但需要进一步解释:假设我们有一台Windows7x64PC,内存为8GB;(64位操作系统和32位进程是我的意图)问题1:64位进程在此环境下可以使用多少内存?问题2:32bit进程在此环境下可以使用多少内存?问题3:如果一个32位的进程在这个环境下只能使用2GB的RAM,(即使是LARGEADDRESSSPACEAWARE:3gb),但是大多数游戏都是32位的;,这个也是这意味着:虽然我们安装了8gb的RAM,但某个游戏在任何给定时间只能使用2-3gb的RAM? 最佳答案 Question1:howmu

windows - 使用 Platform 属性构建 WiX x86/x64

我正在使用以下定义使我的设置脚本根据构建环境变得灵活。详细来说,我在意组件的每个Win64属性中使用的win64Flag变量。我也在包“平台”属性中使用平台。但是为了回到Win64属性,我以这种方式使用变量:Win64="$(var.win64Flag)"而且我总是收到一条警告,告诉我在YesNoType属性中使用此语句是无效的。我正在通过这个调用使用candle.exe构建这些东西:candle.exe-extWixUtilExtension-dPlatform=x86"Deployment\WiXSetupProject\SetupScript.wxs"-out"Deploymen

windows - 如何在 64 位 Windows 中运行旧的 x86 DOS 汇编程序?

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭10年前。Improvethisquestion几年前,我编写了一些x86DOS汇编程序作为批处理文件编程的辅助工具。程序很小;.COM版本大约有两三百个字节。我现在正在更新和创建这些程序的新版本;但是,.COM或.EXE可执行文件不能在64位Windows版本中运行。我需要知道最简单的方法来转换此类程序,以便它们在64位Windows中运行。我知道DosBox可能会这样做,但我需要我的程序在Wincmd.exe批处理文件中运行。有人可以帮

Windows 7 x86 使用 sysenter 执行直接系统调用

我正在尝试编写一些程序来直接调用系统调用而无需通过ntdll.dll我的代码(VisualStudio语法...):#includeintmain(){_asm{pusharg1pusharg2pusharg3moveax,syscall_idmovedx,esp_emit0xf_emit0x34//sysenteropcodes...}当程序尝试执行sysenter指令时,程序因访问冲突而崩溃:CALLDWORDPTRDS:[EAX+EDX*4]//AccessViolationwhenreading[00000128]EAX==0x00000000EDX==0x0000004D我尝

c++ - gcc-c++ 是否没有为当前的 x86-64 处理器优化原子操作

给定以下测试程序:#include#includeint64_tprocess_one(){int64_ta;//Shouldbeatomiconmyhaswellint64_tassign=42;a=assign;returna;}int64_tprocess_two(){std::atomica;int64_tassign=42;a=assign;returna;}intmain(){autores_one=process_one();autores_two=process_two();std::cout编译:g++--std=c++17-O3-march=nativemain.c

c++ - 带有 fat 库的 OS X 上体系结构 x86_64 的 undefined symbol

我自己从源代码构建了libcrypto.a和libssl.a,指定了darwin64-x86_64-cc(对于64位)和darwin-i386-cc(对于32位)到OpenSSL的配置脚本。使用lipo创建胖库并将它们作为依赖项添加到我的Xcode项目中。但是,我遇到了一个undefinedsymbol错误:undefinedsymbolsforarchitecturex86_64:"_OPENSSL_ia32cap_P",referencedfrom:_AES_cbc_encryptinlibcrypto.a(aes-x86_64.o)ld:symbol(s)notfoundfora

c++ - 尽管使用 -fPIC 进行编译,但链接器错误 "relocation R_X86_64_PC32 against undefined symbol"

我正在使用命令行编译一个c++程序g++-cprog.cc-std=c++11-march=native-fPIC-fopenmp然后尝试通过创建一个共享对象g++prog.o-shared-fopenmp-olib/libprog.so这一直有效。但是今天我得到:/usr/bin/ld:prog.o:relocationR_X86_64_PC32againstundefinedsymbol`_ZTVN12_GLOBAL__N_111handle_baseE'cannotbeusedwhenmakingasharedobject;recompilewith-fPIC/usr/bin/l

c++ - 通过 x86 程序集(嵌入在 C++ 中)对数组进行排序?可能的?

我是第一次玩x86汇编,我不知道如何对数组进行排序(通过插入排序)。我理解算法,但汇编让我感到困惑,因为我主要使用Java和C++.这是我目前所拥有的一切intascending_sort(chararrayOfLetters[],intarraySize){chartemp;__asm{pusheaxpushebxpushecxpushedxpushesipushedi////???popedipopesipopedxpopecxpopebxpopeax}}基本上没有:(有什么想法吗?提前致谢。好吧,这只会让我听起来像个彻头彻尾的白痴,但我什至无法更改_asm中数组的任何值为了测试它

c++ - Visual C++ x86 上的 volatile 变量和原子操作

普通加载在x86上具有获取语义,普通存储具有释放语义,但是编译器仍然可以重新排序指令。虽然栅栏和锁定指令(锁定xchg、锁定cmpxchg)防止硬件和编译器重新排序,但仍然需要普通加载和存储来保护编译器屏障。VisualC++提供了_ReadWriterBarrier()函数,它可以防止编译器重新排序,C++也出于同样的原因提供了volatile关键字。我写下所有这些信息只是为了确保我做对了一切。所以上面写的都是真的,是否有任何理由标记为将在受_ReadWriteBarrier()保护的函数中使用的volatile变量?例如:intload(int&var){_ReadWriteBar

c++ - MSVC 无法在 x86 上发送 16 字节对齐的函数参数

我正在使用MSVC来使用一些SSE内在函数。为了支持这一点,我将一些数据对齐到16字节边界。但是,既然我为x86而不是x64编译,MSVC坚持认为我将函数参数对齐到16字节是非法的。但如果这是真的,那么怎么会有人将SSE数据类型作为函数参数发送呢?那么如何在函数中发送16字节对齐的参数? 最佳答案 ifthat'struethenhowcananyoneeversendSSEdatatypesasfunctionparameters?你不能。:)在Microsoft的ABI下,您必须通过引用或指针传递它。一种解决方法可能是使用fas